Documentation (C++ library)

Overview

WOLF is a library for state estimation for robotics, based on factor graphs.

WOLF organizes the typical entities appearing in robotic navigation. These entities are:

  1. The robot hardware and software

    • Sensors

    • Processors

  2. The robot trajectory over time

    • Frames (a.k.a. keyframes)

    • Captures of raw data taken at the time of the keyframes

    • Features extracted from the captures data

    • Factors linking these features to other entities. Factors are diverse, e.g.:

      • Motion and loop closure factors relate to other keyframes

      • Landmark factors relate to landmarks in the map

      • Calibration factors relate to sensor parameters

      • Absolute factors relate to some constant value

      • Many factors have combined relations among the above. This makes them more interesting and powerful.

  3. The map of the surroundings

    • Landmarks

This tree-like structure is what constitutes the WOLF tree, the central data structure of WOLF.

In a nutshell, incoming raw data is processed by the front-ends (the processors) to generate a wolf tree, which is then solved by a back-end (the solver).

WOLF is designed with a modular approach so that new sensors and algorithms can be incorporated in a scalable way.

  • We use for this the WOLF plugins, which act as dynamic libraries that can be loaded at runtime,

  • We also use WOLF autoconf, which provides a straightforward configuration process via YAML configuration files.

The core of WOLF is organized with three basic entities:

  • The WOLF tree, a structure holding all the information of the estimation problem

  • The WOLF processors (which are part of the tree), a collection of front-ends, usually one per sensor, which process raw data and populate the wolf tree

  • A solver wrapper for factor graphs, the back-end that extracts the underlying factor graph from the WOLF tree, and solves it. WOLF actualy provides a wrapper to an external solver. Currently, we use Google Ceres as the external solver.

WOLF provides tools for input/output and configuration:

  • Configuration is achieved via text files in YAML format, which are parsed and used at runtime to set up the problem.

  • Input is achieved through ROS subscribers, should you use ROS as your robotics environment. Out of ROS, it is the user responsibility to read raw data from the drivers and provide it to the appropriate WOLF objects.

  • Output is achieved through publishers that will be used for visualization and/or robot control.

WOLF tools for interfacing with ROS are provided in separate packages. WOLF can also be used out or ROS. A basic representation of the information flow in WOLF using ROS is sketched below:

Basic processing flow in WOLF

Basic processing flow in WOLF using ROS

Contents

TODO: update

  1. The WOLF tree

    introduces the main data structure and all its constituents. This structure is made basically of base classes, defining generic robotics problems.

  2. States

    explains how the states are handled in WOLF, distributed along the WOLF tree and indexed by keys.

  3. Solver

    explains how the interface with a non-linear solver is implemented in WOLF.

  4. The WOLF autoconf

    allows users to configure many diverse robotics projects without the need of writing any C++ code.

  5. The WOLF plugins

    allow users to derive the base classes of the WOLF tree to satisfy their particular sensory needs. Several plugins are available with the basic WOLF distribution.